using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace TestImport
{
    public partial class WisForm : Form
    {
        private string conString = "";
        private SqlConnection conn = null;
        private string cmd = "";
        private SqlCommand cm = null;
        private bool isGewist = false;


        public WisForm()
        {
            InitializeComponent();
            BackColor = InstParameters.Default.schermkleur;
            conString = Properties.Settings.Default.TestImportConnectionString;
            cmbVersie.SelectedIndex = 0;
            
        }

        private void btnWisBoeklijstItem_Click(object sender, EventArgs e)
        {
            /*try
            {
                boeklijstItemTableAdapter.TruncateDummy();
                for (int i = 0; i<40;i++)
                    boeklijstItemTableAdapter.InsertDummy();
                for (int i = 0; i < 40; i++)
                    boeklijstItemTableAdapter.DeleteDummy();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }*/
        }

        private void btnWisBestelling_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U alle (Plato) bestellingen te wissen???", "Wissen bestellingen", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisBestelling();
                if (isGewist) MessageBox.Show("Alle bestellingen zijn gewist");
            }
        }

        private void btnWisLevering_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U alle leveringen te wissen???", "Wissen leveringen", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisLevering();
                if (isGewist) MessageBox.Show("Alle leveringen zijn gewist","WISSEN LEVERINGEN");
            }
        }

        private void btnWisRekening_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U alle rekeningen te wissen???", "Wissen rekeningen", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisRekening();
                if (isGewist) MessageBox.Show("Alle rekeningen zijn gewist");
            }
        }

        private void btnWisLeerlingTransactie_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U alle leerlingtransacties te wissen???"+Environment.NewLine+"De rekeningen worden mee gewist!!", "Wissen leerlingtransacties(bestellingen,afhalingen,retours", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisLeerlingTransactie();
                if (isGewist) MessageBox.Show("Alle leerlingtransacties en rekeningen zijn gewist");
            }

        }

        private void btnWisBoeklijst_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U alle boekenlijsten te wissen???" + Environment.NewLine + "Alle leerlingtransacties en rekeningen worden mee gewist!!!", "Wissen boekenlijsten", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisBoeklijst();
                if (isGewist) MessageBox.Show("Alle boekenlijsten, alle leerlingtransacties en rekeningen zijn gewist");
            }
        }

        private void btnWisLeerling_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U alle leerlingen te wissen???" + Environment.NewLine + "Alle leerlingtransacties en rekeningen worden mee gewist!!!", "Wissen leerlingen", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisLeerling();
                if (isGewist) MessageBox.Show("Alle leerlingen, alle leerlingtransacties en rekeningen zijn gewist");
            }
        }

        private void btnWisGroep_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U alle groepen te wissen???"+ Environment.NewLine +"Alle leerlingen krijgen dan een blanco groepcode!!!", "Wissen groepen", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisGroep();
                if (isGewist) MessageBox.Show("Alle groepen zijn gewist");
            }
        }

        private void btnWisBoek_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U alle boeken te wissen???"+ Environment.NewLine + "Alle (Plato) bestellingen, leveringen, leerlingtransacties en rekeningen worden mee gewist!!!", "Wissen boeken", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisBoek();
                if (isGewist) MessageBox.Show("Alle boeken, alle (Plato) bestellingen, leveringen, leerlingtransacties en rekeningen zijn gewist");
            }
        }

        private void btnWisAlles_Click(object sender, EventArgs e)
        {
            DialogResult res = MessageBox.Show("Wenst U ALLE tabellen te wissen???", "Wissen ganse databank", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.Yes)
            {
                isGewist = false;
                maakKopie();
                wisAlles();
                if (isGewist) MessageBox.Show("Alle tabellen zijn gewist");
            }
        }

        private void wisBestelling()
        {
            try
            {
                conn = new SqlConnection(conString);
                cmd = "TRUNCATE TABLE [BestellingItem]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Bestelling]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                isGewist = true;
                SqlConnection.ClearAllPools();
            }
            catch (Exception ex) { MessageBox.Show("Wissen mislukt!!!" + Environment.NewLine + ex.Message); }
        }

        private void wisLevering()
        {
            try
            {
                conn = new SqlConnection(conString);
                cmd = "TRUNCATE TABLE [LeveringItem]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Levering]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                isGewist = true;
                SqlConnection.ClearAllPools();
            }
            catch (Exception ex) {MessageBox.Show("Wissen mislukt!!!"+Environment.NewLine+ex.Message);}
        }

        private void wisRekening()
        {
            try
            {
                conn = new SqlConnection(conString);
                cmd = "UPDATE [LeerlingBoek] SET rekeningID = NULL";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "UPDATE [LeerlingBoek] SET rekeningRetourID = NULL";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Rekening]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                isGewist = true;
                SqlConnection.ClearAllPools();
            }
            catch (Exception ex) { MessageBox.Show("Wissen mislukt!!!" + Environment.NewLine + ex.Message); }
        }

        private void wisLeerlingTransactie()
        {
            try
            {
                conn = new SqlConnection(conString);
                cmd = "TRUNCATE TABLE [LeerlingBoek]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Rekening]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                isGewist = true;
                SqlConnection.ClearAllPools();
            }
            catch (Exception ex) { MessageBox.Show("Wissen mislukt!!!" + Environment.NewLine + ex.Message); }
        }

        private void wisBoeklijst()
        {
            try
            {
                conn = new SqlConnection(conString);
                cmd = "TRUNCATE TABLE [LeerlingBoek]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Rekening]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                
                cmd = "TRUNCATE TABLE [BoeklijstItem]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Boeklijst]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                isGewist = true;
                SqlConnection.ClearAllPools();
            }
            catch (Exception ex) { MessageBox.Show("Wissen mislukt!!!" + Environment.NewLine + ex.Message); }
        }

        private void wisLeerling()
        {
            try
            {
                conn = new SqlConnection(conString);
                cmd = "TRUNCATE TABLE [LeerlingBoek]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Rekening]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
               

                cmd = "TRUNCATE TABLE [Leerling]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                isGewist = true;
                SqlConnection.ClearAllPools();
            }
            catch (Exception ex) { MessageBox.Show("Wissen mislukt!!!" + Environment.NewLine + ex.Message); }
        }

        private void wisBoek()
        {
            try
            {
                conn = new SqlConnection(conString);
                cmd = "TRUNCATE TABLE [LeerlingBoek]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Rekening]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [BoeklijstItem]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Boeklijst]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [BestellingItem]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Bestelling]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [LeveringItem]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Levering]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
               
                cmd = "TRUNCATE TABLE [Boek]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                isGewist = true;
                SqlConnection.ClearAllPools();
            }
            catch (Exception ex) { MessageBox.Show("Wissen mislukt!!!" + Environment.NewLine + ex.Message); }
        }

        private void wisGroep()
        {
            try
            {
                conn = new SqlConnection(conString);
                cmd = "UPDATE [Leerling] SET groepCode = NULL";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();

                cmd = "TRUNCATE TABLE [Groep]";
                cm = new SqlCommand(cmd, conn);
                conn.Open();
                cm.ExecuteNonQuery();
                conn.Close();
                isGewist = true;
                SqlConnection.ClearAllPools();
            }
            catch (Exception ex) { MessageBox.Show("Wissen mislukt!!!" + Environment.NewLine + ex.Message); }
        }

        private void wisAlles()
        {
            try
            {

            }
            catch (Exception ex) {MessageBox.Show("Wissen mislukt!!!"+Environment.NewLine+ex.Message);}
        }

        private void maakKopie()
        {
            bool opnieuw = true;
            int nrReserveKopie = InstParameters.Default.vReserveKopieNr + 1;
            if (nrReserveKopie == 6) nrReserveKopie = 1;
            //Text = " " + nrReserveKopie;
            while (opnieuw)
            {
                try
                {
                    SqlConnection.ClearAllPools();
                    string pad = @".\DBFKopies\DBFKopie" + nrReserveKopie + @"\PlatoBoeken.mdf";
                    FileInfo fi = new FileInfo("PlatoBoeken.mdf");
                    fi.CopyTo(pad, true);
                    pad = @".\DBFKopies\DBFKopie" + nrReserveKopie + @"\PlatoBoeken_log.ldf";
                    fi = new FileInfo("PlatoBoeken_log.ldf");
                    fi.CopyTo(pad, true);
                    opnieuw = false;
                   
                }
                catch (Exception ex) {}
            }
            InstParameters.Default.vReserveKopieNr = nrReserveKopie;
            InstParameters.Default.Save();
        }

        private void btnWissenOngedaan_Click(object sender, EventArgs e)
        {
            int nrReserveKopie = InstParameters.Default.vReserveKopieNr;
            int nrTerugTeHalenKopie = 0;
            if (nrReserveKopie == 0)
            {
                MessageBox.Show("Er zijn nog geen vroegere versies van de databank!!!");
            }
            else
            {
                int hulp = cmbVersie.SelectedIndex;
                nrTerugTeHalenKopie = nrReserveKopie - hulp;
                if (nrTerugTeHalenKopie < 1)
                    nrTerugTeHalenKopie = 5 + nrTerugTeHalenKopie;
                terugHalenKopie(nrTerugTeHalenKopie);
            }
        }

        private void terugHalenKopie (int nrReserveKopie)
        {
            bool opnieuw = true;
            //Text = " "+nrReserveKopie;
            int t = 0;
            while (opnieuw && t < 20)
            {
                try
                {
                    SqlConnection.ClearAllPools();
                    string pad = @".\DBFKopies\DBFKopie" + nrReserveKopie + @"\PlatoBoeken.mdf";
                    FileInfo fi = new FileInfo(pad);
                    fi.CopyTo(@".\PlatoBoeken.mdf", true);
                    pad = @".\DBFKopies\DBFKopie" + nrReserveKopie + @"\PlatoBoeken_log.ldf";
                    fi = new FileInfo(pad);
                    fi.CopyTo(@".\PlatoBoeken_log.ldf", true);
                    opnieuw = false;
                    //t++;

                }
                catch (Exception ex) { t++; }//"Er is geen vroegere versie van de databank  voor je gemaakte selectie!!!"); }
            }
            //Text = "t= " + t;
            if (opnieuw)
                MessageBox.Show("Er is geen vroegere versie van de databank  voor je gemaakte selectie!!! (" + cmbVersie.Text+")", "WISSEN ONGEDAAN MAKEN MISLUKT");
            else            
                MessageBox.Show(cmbVersie.Text + " is hersteld", "WISSEN ONGEDAAN MAKEN");
           
        }

        

    }
}